<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--<script>-->
    <!--function Car(model,year,miles){-->
        <!--this.model=model;-->
        <!--this.year=year;-->
        <!--this.miles=miles;-->
    <!--}-->
    <!--/*-->
<!--注意：这里我们使用了Object.prototype.方法名，而不是Object.prototype-->
<!--主要是用来避免重写定义原型prototype对象-->
<!--*/-->
    <!--Car.prototype.output=function(){-->
        <!--return this.model +"走了"+this.miles+"公里";-->
    <!--};-->
    <!--var tom=new Car("大叔",2009,2000);-->
    <!--var dudu=new Car("dudu",2010,6000)-->
    <!--console.log(tom.output())-->
    <!--console.log(dudu.output())-->
<!--</script>-->
<!--<script>-->
    <!--//不用new的实现-->
    <!--function Car(model, year, miles) {-->
        <!--this.model = model;-->
        <!--this.year = year;-->
        <!--this.miles = miles;-->
        <!--// 自定义一个output输出内容-->
        <!--this.output = function () {-->
            <!--return this.model + "走了" + this.miles + "公里";-->
        <!--}-->
    <!--}-->

    <!--//方法1：作为函数调用-->
    <!--Car("大叔", 2009, 20000);  //添加到window对象上-->
    <!--console.log(window.output());-->
    <!--//方法2：在另外一个对象的作用域内调用-->
    <!--var o = new Object();-->
    <!--Car.call(o, "Dudu", 2010, 5000);-->
    <!--console.log(o.output());-->
<!--</script>-->
<script>
    //有没有办法让构造函数强制使用new关键字呢,you
    function Car(model, year, miles) {
        if (!(this instanceof Car)) {
            return new Car(model, year, miles);
        }
        this.model = model;
        this.year = year;
        this.miles = miles;
        this.output = function () {
            return this.model + "走了" + this.miles + "公里";
        }
    }

    var tom = new Car("大叔", 2009, 20000);
    var dudu = Car("Dudu", 2010, 5000);

    console.log(typeof tom); // "object"
    console.log(tom.output()); // "大叔走了20000公里"
    console.log(typeof dudu); // "object"
    console.log(dudu.output()); // "Dudu走了5000公里"
//    通过判断this的instanceof是不是Car来决定返回new Car还是继续执行代码，如果使用的是new关键字，则(this instanceof Car)为真，会继续执行下面的参数赋值，如果没有用new，(this instanceof Car)就为假，就会重新new一个实例返回。
</script>
</body>
</html>